package cn.com.surker.material.dao;

import cn.com.surker.material.entity.MainMaterialContractPrice;
import cn.com.surker.oa.entity.OaMaterial;
import cn.com.surker.vo.main.MainMaterialPriceVo;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;

import java.util.List;
import java.util.Map;

/**
 * <p>
 * 材料合同价格表 Mapper 接口
 * </p>
 *
 * @author admin
 * @since 2024-06-29
 */
public interface MainMaterialContractPriceDao extends BaseMapper<MainMaterialContractPrice> {

    /**
     * 查询合同详情是否存在
     * @param supplierId
     * @param contractId
     * @param materialId
     * @param type
     * @return
     */
    MainMaterialContractPrice queryContractOrSupplier(Long supplierId, Long transportId, Long contractId,
                                                      Long materialId, Integer type, String takeTime);

    /**
     * 根据合同查询材料单价信息
     * @param contractId
     * @param type
     * @return
     */
    List<MainMaterialPriceVo> findByContract(Long contractId, Integer type);

    /**
     * 按供应商分组查询
     * @param contractId
     * @param type
     * @return
     */
    List<MainMaterialPriceVo> findByContractV1(Long contractId, Integer type);

    /**
     * 批量新增
     * @param list
     * @return
     */
    Integer saveBatch(List<MainMaterialContractPrice> list);

    /**
     * 查询材料单价号是否存在
     * @param contractId
     * @param supplierId
     * @param materialId
     * @param takeTime
     * @param type 类型 0 主材 1 运输(车) 2 销售 3 运输(船)
     * @return
     */
    Integer findExistContractPrice(Long contractId, Long supplierId, Long materialId, Integer type, String takeTime);

    /**
     * 查询合同所有材料信息
     * @param contractId
     * @return
     */
    List<OaMaterial> findMaterialAll(Long contractId);


    /**
     * 查詢供应商过磅时间价格
     * @param orgId
     * @param supplierId 供应商id
     * @param materialId 材料id
     * @param carType 车辆类型 WeightCarTypeEnum 2材料车
     * @param weightType 过磅类型 OrderWeightTypeEnum 1原材
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @param type 价格类型 0材料 1运输
     * @return
     */
    List<MainMaterialContractPrice> findWeightMaterialPrice(String dbCode, Long orgId, Long supplierId, Long materialId, Integer carType,
                                                            Integer weightType, String startTime, String endTime, Integer type);

    /**
     * 根据供应商及生效时间查询材料单价
     * @param orgId
     * @param supplierId
     * @param transportId
     * @param materialId
     * @param type
     * @param startTime
     * @param endTime
     * @return
     */
    List<MainMaterialContractPrice> findTakeTimeContractPrice(Long orgId, Long supplierId, Long transportId, Long materialId,
                                                              Integer type, String startTime, String endTime, Double price);

    List<MainMaterialContractPrice> findTakeTimeContractPriceV1(String dbCode, Long orgId, Long supplierId, Long transportId, Long materialId,
                                                              Integer type, String startTime, String endTime, Double price, String today);

    /**
     * 查询生效区间的价格信息
     * @return
     */
    MainMaterialContractPrice findTakePrice(Long orgId, Long supplierId, Long transportId, Long materialId,
                                            Integer type, String startTime, String endTime);
}
